package com.zmn.plat.business.interfaces.service.item;

import java.util.List;

import com.zmn.plat.common.dto.product.MaxAveragePriceDRO;
import com.zmn.plat.common.dto.service.item.*;
import com.zmn.plat.model.entity.servcategory.ServTariffAssCategoryQuery;
import com.zmn.plat.model.entity.service.item.ServiceItem;
import com.zmn.plat.model.entity.service.item.ServiceItemEditDIO;
import com.zmn.plat.model.vo.service.item.ServiceItemDetailVO;
import com.zmn.plat.model.vo.service.item.ServiceItemWarrantyInfoVO;
import com.zmn.plat.model.vo.service.item.ServicePageVO;
import com.zmn.plat.model.vo.warranty.WarrantyInfoVO;

/**
 * @author tanbiao
 * @description
 * @modifier
 * @since 2019/11/27 10:05
 **/
public interface ServiceItemBService {

    /**
     * 功能描述 :根据故障项id查询故障项
     *
     * @param itemId
     * @return com.zmn.plat.model.vo.service.item.FaultItemDRO
     * @author tanbiao
     * @modifier
     * @since 2019/12/5
     */
    ServiceItemDRO getById(Integer itemId);

    /**
     * 功能描述 :详情页需要显示的实体
     *
     * @param itemId
     * @param groupId
     * @return com.zmn.plat.model.vo.service.item.ServiceItemDetailVO
     * @author tanbiao
     * @modifier
     * @since 2019/12/5
     */
    ServiceItemDetailVO getByItemIdAndGroupId(Integer itemId, Integer groupId);

    /**
     * 描述：查询服务项最大的服务时间，如果服务项配置了服务时间取服务项的服务时间，没有配置，取前台产品二级分类下设置的服务时长，单位分钟
     * @param productId
     * @param itemIdList
     * @param companyId
     * @author tanbiao
     * @since 2020/12/9 9:50
     * @return java.lang.Integer
     * @modifier
     */
    Integer getMaxServiceMinutes(Integer productId, List<Integer> itemIdList, Integer companyId);

    /**
     * 根据服务分类Id，一级分类ID，故障分组id和项目ID获取保修信息
     *
     * @param servCategId
     * @param categOneId
     * @param groupId
     * @param itemId
     * @return
     */
    ServiceItemWarrantyInfoVO getWarrantyInfoByServCategIdAndCategIdAndGroupIdAndItemId(Integer servCategId, Integer categOneId, Integer groupId, Integer itemId);

    /**
     * 根据价格表ID，服务分类ID，一级分类ID获取快速设置保修信息
     *
     * @param tariffId
     * @param servCategId
     * @param categOneId
     * @return
     */
    ServiceItemWarrantyInfoVO getBatchWarrantyInfoByTariffIdAndServCategIdAndCategOneId(Integer tariffId, Integer servCategId, Integer categOneId);

    /**
     * 描述: 根据产品ID和城市ID查询服务项价格平均值和最大值
     *
     * @param productId
     *            产品ID
     * @param cityId
     *            城市ID
     * @param keepType
     *            1保外2保内
     * @param channelId
     *            渠道ID
     * @return: ServServiceItemDRO
     * @auther: tanghongjun
     * @since: 2018/10/23 11:11
     */
    MaxAveragePriceDRO getMaxAveragePriceByChannelIdAndTypeAndCityIdAndProductId(ServiceItemServDIO dio);

    /**
     * 查询产品默认价格表
     *
     * @param productId
     *            产品ID
     * @param keepType
     *            1保外/2保内
     * @param cityId
     *            城市：用于取城市价格系数
     * @return
     */
    ProductPriceTableDRO getProductDefaultPriceTable(ServiceItemServDIO faultItemServDIO);

    /**
     * 功能描述 :故障价格表入口
     *
     * @param query
     * @return com.zmn.plat.model.vo.service.item.ServiceItemDetailVO
     * @author tanbiao
     * @modifier
     * @since 2019/12/5
     */
    ServicePageVO listPageByQuery(ServTariffAssCategoryQuery query);

    /**
     * 描述:根据服务项查询条件查询服务项详细信息
     *
     * @param servItemPriceDIO
     * @return
     * @auther tanghongjun
     * @since 2018/11/27 16:00
     */
    List<ProductServiceItemDRO> listByDIO(ServiceItemServPriceDIO servItemPriceDIO);

    /**
     * 描述:查询特殊服务项信息
     *
     * @param categIds
     * @return
     * @auther tanghongjun
     * @since 2018/11/27 16:00
     */
    List<ProductServiceItemDRO> listByCategIdList(List<Integer> categIds,Integer companyId);

    /**
     * 描述: 根据服务组ID查询服务项详细信息
     *
     * @param groupId
     * @return: List<FaultItemDRO>
     * @auther: tanghongjun
     * @since: 2018/10/23 11:11
     */
    List<ServiceItemDRO> listByGroupId(Integer groupId);

    /**
     * 描述: 根据查询条件查询服务项信息
     *
     * @param query
     * @return: List<FaultItemDRO>
     * @auther: tanghongjun
     * @since: 2018/10/23 11:12
     */
    List<ServiceItemDRO> listByDIO(ServiceItemDIO query);

    /**
     * 描述: 根据产品ID和城市ID查询服务项价格信息
     *
     * @param productId
     *            产品ID
     * @param cityId
     *            城市ID
     * @param keepType
     *            1保外2保内
     * @param channelId
     *            渠道ID
     * @return: ServServiceItemDRO
     * @auther: tanghongjun
     * @since: 2018/10/23 11:11
     */
    List<ProductServiceItemDRO> listByChannelIdAndTypeAndCityIdAndProductId(ServiceItemServDIO dio);

    /**
     * 功能描述 :服务项新增修改 1.只能有一个默认服务项，已存在一个新增一个默认项将替换原有默认项 2.非一口价，交通费工时费包干费置位空 3.不保修，保修范围保修天数置空
     *
     * @param faultItem
     * @param operator
     * @return java.lang.Integer
     * @author tanbiao
     * @modifier
     * @since 2019/11/27
     */
    Integer addEdit(ServiceItemEditDIO faultItem, String operator);

    /**
     * 批量添加保修信息
     *
     * @param warrantyInfoVO
     * @param operator
     * @return
     */
    void batchAddEditWarrantyInfo(WarrantyInfoVO warrantyInfoVO, String operator);

    /**
     * 功能描述 :删除服务项 1.只能删除停用的服务项 2.删除关联的价格表数据 3.删除服务项对应的保修信息
     *
     * @param itemId
     * @return java.lang.Integer
     * @author tanbiao
     * @modifier linfeng
     * @since 2019/11/27
     */
    Integer deleteByKey(Integer itemId);

}
